package com.example.demo.common.utills;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.StringJoiner;
import java.util.regex.Pattern;

public class StringUtil {
    public static boolean isNotEmptyAndNull(String str) {
        if (null != str && !str.equals("") && !"null".equals(str)) {
            return true;
        }
        return false;
    }

    public static boolean isEmpty(String str) {
        if (null == str || str.equals("")) {
            return true;
        }
        return false;
    }

    /**
     * @param characters     要查找的字符
     * @param destinationStr 目标字符串
     * @return
     */
    public static int numberOfCharacters(String characters, String destinationStr) {
        int indexStart = 0;
        //获取查找字符串的长度，这里有个规律：第二次查找出字符串的起始位置等于 第一次ab字符串出现的位置+ab的长度
        int compareStrLength = characters.length();
        int count = 0;
        while (true) {
            int tm = destinationStr.indexOf(characters, indexStart);
            if (tm >= 0) {
                count++;
                //  没查找一次就从新计算下次开始查找的位置
                indexStart = tm + compareStrLength;
            } else {
                //直到没有匹配结果为止
                break;
            }
        }
        return count;
    }

    /**
     * 获取六位字符串
     *
     * @param i
     * @return
     */
    public static String IntToStringByFormat(int i) {
        return String.format("%06d", i);
    }

    /**
     * 将集合中的数据 以隔开符加到同一字符串中
     *
     * @param delimiter
     * @param list
     * @return
     */
    public static String addListStr_toString(String delimiter, List<String> list) {
        StringJoiner stringJoiner = new StringJoiner(delimiter);
        if (list != null) {
            for (String s : list) {
                stringJoiner.add(s);
            }
            return stringJoiner.toString();
        } else {
            return null;
        }
    }
    /*方法二：推荐，速度最快
     * 判断是否为整数
     * @param str 传入的字符串
     * @return 是整数返回true,否则返回false
     */

    public static boolean isInteger(String str) {
        Pattern pattern = Pattern.compile("^[-\\+]?[\\d]*$");
        return pattern.matcher(str).matches();
    }

    /**
     * 判断逗号分隔的字符串中是否包含目标字符串
     *
     * @param splitStr
     * @param str
     * @return
     */
    public static boolean isSplitEquals(String splitStr, String str) {
        if (!isNotEmptyAndNull(splitStr)) {
            return false;
        }
        return Arrays.asList(splitStr.split(",")).contains(str);
    }


    public static void main(String[] args) {
        // 如何把list集合拼接成以逗号分隔的字符串 a,b,c
//        List<String> list = Arrays.asList("a", "b", "c");
        List<String> list = new ArrayList<>();
        list.add("a");
        list.add("b");
        list.add("c");
        // 第一种方法，可以用stream流
//    String join = list.stream().collect(Collectors.joining(","));
//    System.out.println(join); // 输出 a,b,c
        // 第二种方法，其实String也有join方法可以实现这个功能
        String join = String.join(",", list);
        String d = "d";
        list.add(d);

        System.out.println(join);
    }

}
